package online.flytool.base.lang;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static online.flytool.base.lang.StringHelper.*;


/**
 * @author ：lingchong
 * @date ：Created in 2022/7/3 15:29
 * @description：字符串的转换类
 * @modified By：
 * @version: $
 */
public class StringAs {

    /**
     * 驼峰转下滑线
     * @param param
     * @return
     */
    public static String camelToUnderline(String param) {
        if (isBlank(param)) {
            return "";
        } else {
            int len = param.length();
            StringBuilder sb = new StringBuilder(len);

            for(int i = 0; i < len; ++i) {
                char c = param.charAt(i);
                if (Character.isUpperCase(c) && i > 0) {
                    sb.append('_');
                }

                sb.append(Character.toLowerCase(c));
            }

            return sb.toString();
        }
    }

    /**
     * 下滑线转驼峰
     * @param param
     * @return
     */
    public static String underlineToCamel(String param) {
        if (isBlank(param)) {
            return "";
        } else {
            String temp = param.toLowerCase();
            int len = temp.length();
            StringBuilder sb = new StringBuilder(len);

            for(int i = 0; i < len; ++i) {
                char c = temp.charAt(i);
                if (c == '_') {
                    ++i;
                    if (i < len) {
                        sb.append(Character.toUpperCase(temp.charAt(i)));
                    }
                } else {
                    sb.append(c);
                }
            }

            return sb.toString();
        }
    }

    /**
     * 首字母转为小写
     * @param param
     * @return
     */
    public static String firstToLowerCase(String param) {
        return isBlank(param) ? "" : param.substring(0, 1).toLowerCase() + param.substring(1);
    }

    /**
     * 将第一个字母转为大写
     * @param src
     * @return
     */
    public static String upperFirst(String src) {
        if (Character.isLowerCase(src.charAt(0))) {
            return 1 == src.length() ? src.toUpperCase() : Character.toUpperCase(src.charAt(0)) + src.substring(1);
        } else {
            return src;
        }
    }

    /**
     * 根据get方法获取属性名
     * @param getMethodName
     * @return
     */
    public static String resolveFieldName(String getMethodName) {
        if (getMethodName.startsWith("get")) {
            getMethodName = getMethodName.substring(3);
        } else if (getMethodName.startsWith("is")) {
            getMethodName = getMethodName.substring(2);
        }
        return firstToLowerCase(getMethodName);
    }

    /**
     * 百分比计算法 根据一个值返回百分比
     * @param x
     * @param total
     * @return
     */
    public static String getPercent(int x,int total){
        if(total==0){
            return "0.00%";
        }
        String result = "";//接受百分比的值
        double x_double = x*1.0;
        //  注意如果直接用x/total 会变成0（所以两者之一至少转换为double）  这个原生方法没有写好 还是我补充的，吐槽一波
        double tempresult = x_double/total;

        DecimalFormat df1 = new DecimalFormat("0.00%");    //##.00%   百分比格式，后面不足2位的用0补齐
        result= df1.format(tempresult);

        return result;
    }

}